#ifndef DATABASEHELPER_H
#define DATABASEHELPER_H

#include <QObject>
#include <QSqlDatabase>//数据库管理和操作
#include <QSqlQuery>//执行sql语句并处理查询结果
#include <QSqlError> //通过text（）函数可以获取数据库错误的详细文本
#include <QSqlRecord>//记录数据库中的信息
#include <QMessageBox>//用于创建和显示各种消息对话框的类
#include <QList>
#include <QString>

// 歌曲信息结构体
struct SongInfo {
    int id;
    QString songname;
    QString singername;
    QString album_id;
    QString hash;
};

class DatabaseHelper : public QObject {
    Q_OBJECT

public:
    //单例模式的全局访问点，用于获取 DatabaseHelper 的唯一实例
    static DatabaseHelper* getInstance(QObject *parent = nullptr);
    ~DatabaseHelper();

    // 数据库连接状态
    bool isOpen() const;

    // 表操作
    bool createTables();

    // 搜索列表操作
    bool clearSearchList();
    bool insertSearchSong(const SongInfo& song);//插入搜索到的歌曲信息到数据库
    SongInfo querySearchSongByRow(int row);//根据行号查询搜索结果中的歌曲信息

    // 历史记录操作
    bool insertHistorySong(const SongInfo& song);
    QList<SongInfo> queryAllHistorySongs();
    SongInfo queryHistorySongById(int id);


private:
    // 私有构造函数：外部无法直接创建
    explicit DatabaseHelper(QObject *parent = nullptr);
    static DatabaseHelper* instance;  // 单例管理，它用于存储 DatabaseHelper 的唯一实例，避免重复创建数据库助手对象。
    QSqlDatabase db;//数据库连接对象，封装具体数据库连接，提供数据库的操作人口
    const QString CONN_NAME = "music_player_conn";//标识唯一的数据库连接
    const QString DB_NAME = "mp3listdatabase.db";//定义数据库文件名称
};

#endif // DATABASEHELPER_H
